Skill
আনসিবল (Ansible)

ইনভেন্টরি ফাইল

Latest Technologies - আনসিবল (Ansible) - NCTB BOOK

Ansible-এর ইনভেন্টরি ফাইল একটি টেক্সট ফাইল যেখানে আপনি ম্যানেজ করা হোস্ট এবং তাদের গ্রুপের তথ্য সংরক্ষণ করেন। এই ফাইলটি Ansible-এর জন্য একটি গাইড হিসেবে কাজ করে যা নির্দিষ্ট হোস্ট বা হোস্ট গ্রুপে টাস্ক বা প্লেবুক রান করতে ব্যবহার হয়। ডিফল্ট ইনভেন্টরি ফাইলটি সাধারণত /etc/ansible/hosts এ থাকে, কিন্তু আপনি ইচ্ছা করলে কাস্টম ইনভেন্টরি ফাইলও ব্যবহার করতে পারেন।

ইনভেন্টরি ফাইলের ফরম্যাট

Ansible ইনভেন্টরি ফাইল সাধারণত দুই ধরনের হতে পারে:

  1. ইনিআর ফরম্যাট (INI format) - এটি হলো সহজ এবং জনপ্রিয় ফরম্যাট।
  2. ইয়ামল ফরম্যাট (YAML format) - এটির মাধ্যমে ইনভেন্টরি ফাইল আরও স্ট্রাকচারড এবং অ্যাডভান্সড ভাবে লেখা যায়।

INI ফরম্যাটের উদাহরণ

INI ফরম্যাটের ইনভেন্টরি ফাইল কিছুটা নিচের মতো হতে পারে:

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa

ব্যাখ্যা:

  • [webservers] এবং [dbservers] হলো গ্রুপ, যেখানে হোস্টগুলো লিস্ট করা হয়েছে।
  • [all:vars] হলো সমস্ত হোস্টের জন্য কমন ভ্যারিয়েবল।

YAML ফরম্যাটের উদাহরণ

YAML ফরম্যাটে ইনভেন্টরি ফাইল লিখলে এটি অনেক বেশি রিডেবল ও ফ্লেক্সিবল হয়:

all:
  hosts:
    web1.example.com:
    web2.example.com:
    db1.example.com:
    db2.example.com:
  children:
    webservers:
      hosts:
        web1.example.com:
        web2.example.com:
    dbservers:
      hosts:
        db1.example.com:
        db2.example.com:
  vars:
    ansible_user: ubuntu
    ansible_ssh_private_key_file: ~/.ssh/id_rsa

ব্যাখ্যা:

  • all: এর মধ্যে সমস্ত হোস্ট এবং গ্রুপ ডিফাইন করা হয়েছে।
  • children: এর মধ্যে গ্রুপ ডিফাইন করা হয়েছে এবং তাদের মধ্যে হোস্টগুলো লিস্ট করা হয়েছে।
  • vars: হলো গ্লোবাল ভ্যারিয়েবল, যা সমস্ত হোস্টের জন্য প্রযোজ্য।

কাস্টম ইনভেন্টরি ফাইল ব্যবহার

আপনি কাস্টম ইনভেন্টরি ফাইল ব্যবহার করতে চাইলে, ansible বা ansible-playbook কমান্ডের সাথে -i ফ্ল্যাগ ব্যবহার করে ফাইলের পথ উল্লেখ করতে হবে:

ansible-playbook -i my_custom_inventory_file.yml playbook.yml

এইভাবে আপনি ইনভেন্টরি ফাইলকে কাস্টমাইজ করে আপনার ইনফ্রাস্ট্রাকচার বা সার্ভার গ্রুপিং করতে পারবেন।

ইনভেন্টরি ফাইলের ধারণা এবং উদাহরণ

Ansible ইনভেন্টরি ফাইল হলো এমন একটি ফাইল যেখানে ম্যানেজ করা হোস্ট (সার্ভার) এবং তাদের গ্রুপিং সংক্রান্ত তথ্য রাখা হয়। Ansible এই ইনভেন্টরি ফাইলের মাধ্যমে নির্ধারণ করে কোন হোস্টে কমান্ড বা প্লেবুক কার্যকর হবে। এটি ম্যানুয়াল প্রক্রিয়ার তুলনায় অটোমেশন এবং অর্গানাইজেশনের একটি সহজ উপায়। ইনভেন্টরি ফাইলের মধ্যে হোস্ট, গ্রুপ এবং ভ্যারিয়েবল সংরক্ষিত থাকে।

ইনভেন্টরি ফাইলের ধারণা

  • হোস্ট: এটি একটি নির্দিষ্ট সার্ভার বা মেশিন, যা Ansible ম্যানেজ করে। ইনভেন্টরি ফাইলে হোস্টের আইপি এড্রেস বা ডোমেইন নেম উল্লেখ করা হয়।
  • গ্রুপ: গ্রুপ হলো একাধিক হোস্টের একটি কালেকশন, যা একই ধরনের কনফিগারেশন বা সেটিংস প্রয়োগ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, webservers, dbservers ইত্যাদি গ্রুপ হতে পারে।
  • ভ্যারিয়েবলস: ভ্যারিয়েবলস ব্যবহার করে নির্দিষ্ট হোস্ট বা গ্রুপের জন্য কনফিগারেশন প্যারামিটার দেওয়া যায়, যেমন ansible_user, ansible_port, ansible_ssh_private_key_file ইত্যাদি।

ইনভেন্টরি ফাইলের উদাহরণ

১. INI ফরম্যাট উদাহরণ

INI ফরম্যাট সহজ এবং সরাসরি; এটি কিছুটা নিচের মতো হতে পারে:

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa

ব্যাখ্যা:

  • [webservers] এবং [dbservers] হলো গ্রুপ, যেখানে সংশ্লিষ্ট হোস্টের নাম বা আইপি উল্লেখ করা হয়েছে।
  • [all:vars] হলো গ্লোবাল ভ্যারিয়েবল সেকশন, যা ইনভেন্টরি ফাইলের সব হোস্টের জন্য সাধারণভাবে প্রযোজ্য হবে।

২. YAML ফরম্যাট উদাহরণ

YAML ফরম্যাট আরও স্ট্রাকচারড এবং উন্নত:

all:
  hosts:
    web1.example.com:
    web2.example.com:
    db1.example.com:
    db2.example.com:
  children:
    webservers:
      hosts:
        web1.example.com:
        web2.example.com:
    dbservers:
      hosts:
        db1.example.com:
        db2.example.com:
  vars:
    ansible_user: ubuntu
    ansible_ssh_private_key_file: ~/.ssh/id_rsa

ব্যাখ্যা:

  • all: সেকশনে সমস্ত হোস্ট এবং গ্রুপ ডিফাইন করা হয়েছে।
  • children: অংশে গ্রুপগুলো এবং তাদের মধ্যে হোস্টগুলো লিস্ট করা হয়েছে।
  • vars: অংশে গ্লোবাল ভ্যারিয়েবলস উল্লেখ করা হয়েছে যা ইনভেন্টরির সব হোস্টের জন্য প্রযোজ্য।

কাস্টম ইনভেন্টরি ফাইল ব্যবহার করা

কাস্টম ইনভেন্টরি ফাইল ব্যবহার করতে ansible বা ansible-playbook কমান্ডের সাথে -i ফ্ল্যাগ ব্যবহার করা হয়:

ansible-playbook -i inventory_file.yml playbook.yml

এভাবে Ansible-এর ইনভেন্টরি ফাইল ব্যবহারের মাধ্যমে আপনার ইনফ্রাস্ট্রাকচারকে গ্রুপভিত্তিক ভাবে ম্যানেজ ও কনফিগার করতে পারবেন।

Static এবং Dynamic ইনভেন্টরি

Ansible-এ Static এবং Dynamic ইনভেন্টরি দুটি ভিন্ন পদ্ধতি ব্যবহার করে হোস্টের তালিকা সংরক্ষণ করা হয়। ইনভেন্টরি হলো এমন একটি ফাইল বা সোর্স, যা Ansible-কে বলে দেয় কোন হোস্টগুলোতে কাজ করতে হবে। চলুন, এদের বিস্তারিত ব্যাখ্যা করা যাক।

1. Static Inventory

Static Inventory হলো একটি সাধারণ টেক্সট ফাইল (সাধারণত hosts নামে), যেখানে সার্ভারের তথ্য স্ট্যাটিক আকারে লেখা থাকে। এই ইনভেন্টরিটি .ini বা .yaml ফরম্যাটে থাকতে পারে।

উদাহরণ: (INI ফরম্যাটে hosts ফাইল)

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

এখানে:

  • [webservers] এবং [dbservers] হলো গ্রুপ, যেগুলোতে একাধিক হোস্ট (যেমন web1.example.com) যুক্ত করা হয়েছে।
  • এই স্ট্যাটিক ইনভেন্টরিতে Ansible সরাসরি ফাইল থেকে হোস্ট তথ্য নেয় এবং কাজ করে।

Static Inventory-এর সুবিধা:

  • সহজে তৈরি এবং ব্যবহার করা যায়।
  • ছোট এবং স্ট্যাটিক এনভায়রনমেন্টের জন্য উপযুক্ত।

Static Inventory-এর অসুবিধা:

  • বড় এনভায়রনমেন্টের জন্য ব্যবস্থাপনা করা কঠিন।
  • যদি সার্ভারের আইপি বা নাম পরিবর্তন হয়, তবে ম্যানুয়ালি আপডেট করতে হয়।

2. Dynamic Inventory

Dynamic Inventory একটি স্ক্রিপ্ট বা প্রোগ্রাম যা Ansible-কে রিয়েল-টাইমে হোস্টের তথ্য সরবরাহ করে। সাধারণত বড় এবং পরিবর্তনশীল পরিবেশের জন্য এটি ব্যবহার করা হয়, যেমন AWS, GCP, Azure-এর মতো ক্লাউড প্ল্যাটফর্মে যেখানে সার্ভারের সংখ্যা প্রায়ই পরিবর্তিত হয়।

উদাহরণ: (AWS EC2 এর জন্য ডাইনামিক ইনভেন্টরি) ec2.py নামে একটি স্ক্রিপ্ট ব্যবহার করে Ansible EC2 ইনস্ট্যান্সের তালিকা নিতে পারে। এই স্ক্রিপ্টটি AWS API থেকে তথ্য নিয়ে ইনভেন্টরি তৈরি করে।

Dynamic Inventory-এর সুবিধা:

  • স্বয়ংক্রিয়ভাবে হোস্ট তথ্য সংগ্রহ করতে পারে।
  • বড় এবং ডাইনামিক পরিবেশের জন্য খুবই উপযোগী।
  • Ansible Tower বা AWX-এর সাথে সহজে ইন্টিগ্রেট করা যায়।

Dynamic Inventory-এর অসুবিধা:

  • সেটআপ ও কনফিগারেশন তুলনামূলকভাবে জটিল।
  • স্ক্রিপ্ট বা প্লাগইন কনফিগারেশন ঠিকমতো করতে না পারলে সমস্যা হতে পারে।

Dynamic Inventory Configuration Example (AWS এর জন্য)

ansible.cfg ফাইলের মাধ্যমে কনফিগার করা যায়:

[defaults]
inventory = ./ec2.py

AWS এর Dynamic Inventory প্লাগইন কনফিগার করা উদাহরণ: (YAML ফাইলের মাধ্যমে)

plugin: aws_ec2
regions:
  - us-east-1
filters:
  tag:Name: webserver
keyed_groups:
  - key: tags.Name
    prefix: tag

এখানে:

  • plugin: aws_ec2 ব্যবহার করে AWS-এর ইনভেন্টরি প্লাগইন সক্রিয় করা হয়েছে।
  • নির্দিষ্ট রিজিওন এবং ট্যাগ অনুযায়ী হোস্ট গ্রুপ করা হয়েছে।

সংক্ষেপে:

  • Static Inventory: ছোট ও স্থির এনভায়রনমেন্টের জন্য উপযোগী, ম্যানুয়ালি মেইনটেন করতে হয়।
  • Dynamic Inventory: বড়, ডাইনামিক এবং স্বয়ংক্রিয় হোস্ট ম্যানেজমেন্টের জন্য কার্যকর।

যদি কোনো নির্দিষ্ট Dynamic Inventory সেটআপ বা স্ট্যাটিক ইনভেন্টরির কনফিগারেশন নিয়ে আরও বিস্তারিত জানার প্রয়োজন হয়, আমাকে জানাতে পারেন!

হোস্ট এবং গ্রুপ তৈরি করা

Ansible-এ হোস্ট এবং গ্রুপ তৈরি করতে আপনাকে ইনভেন্টরি ফাইল তৈরি করতে হবে যেখানে আপনি আপনার হোস্ট এবং গ্রুপগুলির তথ্য সংরক্ষণ করবেন। এটি সাধারণত একটি INI, YAML, বা ডাইনামিক ইনভেন্টরি স্ক্রিপ্টের মাধ্যমে করা যায়। এখানে আমি একটি সহজ INI এবং YAML ইনভেন্টরি ফাইল ব্যবহার করে হোস্ট এবং গ্রুপ তৈরি করার উদাহরণ দেব।

উদাহরণ ১: INI ফরম্যাট ব্যবহার করে ইনভেন্টরি

hosts.ini নামে একটি ইনভেন্টরি ফাইল তৈরি করুন:

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

[all_servers:children]
webservers
dbservers

[all_servers:vars]
ansible_user=ansible
ansible_ssh_private_key_file=~/.ssh/id_rsa

এখানে:

  • [webservers] এবং [dbservers] আলাদা আলাদা গ্রুপ যা নির্দিষ্ট হোস্ট ধারণ করে।
  • [all_servers:children] গ্রুপটি [webservers] এবং [dbservers] এর কম্বিনেশন।
  • [all_servers:vars] অংশে গ্রুপভিত্তিক ভ্যারিয়েবল সেট করা হয়েছে।

উদাহরণ ২: YAML ফরম্যাট ব্যবহার করে ইনভেন্টরি

hosts.yml নামে একটি YAML ইনভেন্টরি ফাইল তৈরি করুন:

all:
  children:
    webservers:
      hosts:
        web1.example.com:
        web2.example.com:
    dbservers:
      hosts:
        db1.example.com:
        db2.example.com:
  vars:
    ansible_user: ansible
    ansible_ssh_private_key_file: ~/.ssh/id_rsa

এখানে:

  • webservers এবং dbservers নামের গ্রুপ তৈরি করা হয়েছে, যেখানে নির্দিষ্ট হোস্টগুলো রয়েছে।
  • vars সেকশনে গ্রুপভিত্তিক ভ্যারিয়েবল সংযোজন করা হয়েছে।

Ansible কমান্ড দিয়ে ইনভেন্টরি ব্যবহার করা

ansible -i hosts.ini all_servers -m ping

অথবা, YAML ফরম্যাট ব্যবহার করলে:

ansible -i hosts.yml all_servers -m ping

এই কমান্ডগুলো ইনভেন্টরি ফাইল থেকে গ্রুপ এবং হোস্টগুলো লোড করে এবং তাদের পিং করে দেখাবে।

এইভাবে Ansible-এ ইনভেন্টরি ফাইল ব্যবহার করে আপনি সহজেই হোস্ট এবং গ্রুপ তৈরি করতে এবং কনফিগারেশন ম্যানেজমেন্ট পরিচালনা করতে পারবেন।

হোস্ট ভ্যারিয়েবল এবং গ্রুপ ভ্যারিয়েবল

Ansible-এ হোস্ট ভ্যারিয়েবল এবং গ্রুপ ভ্যারিয়েবল ব্যবহার করা হয় হোস্ট ও গ্রুপ অনুযায়ী কনফিগারেশন ব্যবস্থাপনা করতে। এদের মাধ্যমে নির্দিষ্ট হোস্ট বা হোস্টের গ্রুপের জন্য বিভিন্ন কনফিগারেশন ডিফাইন করা যায়।

১. হোস্ট ভ্যারিয়েবল (Host Variables)

হোস্ট ভ্যারিয়েবল নির্দিষ্ট হোস্টের জন্য কনফিগারেশন ডিফাইন করতে ব্যবহার করা হয়। এই ভ্যারিয়েবলগুলি একটি নির্দিষ্ট হোস্টের জন্য প্রযোজ্য হয়, এবং অন্যান্য হোস্টের সাথে শেয়ার হয় না। সাধারণত, এ গুলো ইনভেন্টরি ফাইলে, ইনভেন্টরি ডিরেক্টরির host_vars/ ডিরেক্টরিতে ফাইল হিসেবে সংরক্ষণ করা হয়।

উদাহরণ:

ইনভেন্টরি ফাইলে হোস্ট ডিফাইন করা:

[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11

host_vars/ ডিরেক্টরির মধ্যে একটি ফাইল তৈরি করা web1 নামে:

# host_vars/web1
apache_port: 8080

এই কনফিগারেশন অনুযায়ী web1 হোস্টের জন্য apache_port ভ্যারিয়েবল ৮০৮০ সেট করা হয়েছে। অন্য হোস্টের জন্য এই ভ্যারিয়েবল প্রযোজ্য নয়।

২. গ্রুপ ভ্যারিয়েবল (Group Variables)

গ্রুপ ভ্যারিয়েবল একাধিক হোস্টের জন্য একই ধরনের কনফিগারেশন ডিফাইন করতে ব্যবহার করা হয়। যদি একই ধরনের কনফিগারেশন বা সেটিংস একাধিক হোস্টের ক্ষেত্রে প্রযোজ্য হয়, তখন গ্রুপ ভ্যারিয়েবল ব্যবহার করা সুবিধাজনক। এগুলো ইনভেন্টরি ডিরেক্টরির group_vars/ ডিরেক্টরিতে ফাইল হিসেবে সংরক্ষণ করা হয়।

উদাহরণ:

ইনভেন্টরি ফাইলে গ্রুপ ডিফাইন করা:

[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11

[databases]
db1 ansible_host=192.168.1.12
db2 ansible_host=192.168.1.13

group_vars/ ডিরেক্টরির মধ্যে একটি ফাইল তৈরি করা webservers নামে:

# group_vars/webservers
apache_port: 80
document_root: /var/www/html

এই ক্ষেত্রে, webservers গ্রুপে অন্তর্ভুক্ত সকল হোস্টের জন্য apache_port ভ্যারিয়েবল ৮০ এবং document_root /var/www/html হবে।

সংক্ষেপে পার্থক্য:

  • হোস্ট ভ্যারিয়েবল: নির্দিষ্ট হোস্টের জন্য প্রযোজ্য ভ্যারিয়েবল।
  • গ্রুপ ভ্যারিয়েবল: একাধিক হোস্টের জন্য (একই গ্রুপের হোস্ট) প্রযোজ্য ভ্যারিয়েবল।

এইভাবে হোস্ট এবং গ্রুপ ভ্যারিয়েবল ব্যবহারের মাধ্যমে Ansible-এ ডাইনামিক ও স্কেলেবল কনফিগারেশন ম্যানেজমেন্ট করা সম্ভব।

Promotion